import { PrismaClient } from '@prisma/client';
import { hashPassword } from '../lib/auth';

const prisma = new PrismaClient();

async function main() {
  // 创建管理员用户
  const adminUser = await prisma.user.upsert({
    where: { email: 'admin@example.com' },
    update: {},
    create: {
      email: 'admin@example.com',
      name: '博客管理员',
      password: await hashPassword('admin123'),
      role: 'ADMIN'
    }
  });

  // 创建标签
  const tags = await Promise.all([
    prisma.tag.upsert({
      where: { name: 'Next.js' },
      update: {},
      create: { name: 'Next.js' }
    }),
    prisma.tag.upsert({
      where: { name: 'React' },
      update: {},
      create: { name: 'React' }
    }),
    prisma.tag.upsert({
      where: { name: 'TypeScript' },
      update: {},
      create: { name: 'TypeScript' }
    }),
    prisma.tag.upsert({
      where: { name: 'Tailwind CSS' },
      update: {},
      create: { name: 'Tailwind CSS' }
    }),
    prisma.tag.upsert({
      where: { name: 'Web开发' },
      update: {},
      create: { name: 'Web开发' }
    }),
    prisma.tag.upsert({
      where: { name: '性能优化' },
      update: {},
      create: { name: '性能优化' }
    }),
    prisma.tag.upsert({
      where: { name: '用户体验' },
      update: {},
      create: { name: '用户体验' }
    }),
    prisma.tag.upsert({
      where: { name: 'JavaScript' },
      update: {},
      create: { name: 'JavaScript' }
    }),
    prisma.tag.upsert({
      where: { name: '前端开发' },
      update: {},
      create: { name: '前端开发' }
    }),
    prisma.tag.upsert({
      where: { name: '全栈开发' },
      update: {},
      create: { name: '全栈开发' }
    }),
    prisma.tag.upsert({
      where: { name: 'API' },
      update: {},
      create: { name: 'API' }
    }),
    prisma.tag.upsert({
      where: { name: '数据库' },
      update: {},
      create: { name: '数据库' }
    }),
    prisma.tag.upsert({
      where: { name: '草稿' },
      update: {},
      create: { name: '草稿' }
    })
  ]);

  // 创建示例文章
  const posts = [
    {
      title: '欢迎来到我的博客',
      content: `# 欢迎来到我的博客

这是一个使用 Next.js 15 和 Tailwind CSS 构建的现代化博客系统。

## 主要特性

- 🚀 基于 Next.js 15 App Router
- 🎨 使用 Tailwind CSS 4 进行样式设计
- 📱 完全响应式设计
- ⚡ 使用 Turbopack 进行快速开发
- 🔧 TypeScript 支持
- 🎯 组件化架构
- 🗄️ 使用 Prisma 和 SQLite 数据库
- 🔐 JWT 用户认证系统

## 技术栈

- **前端框架**: Next.js 15.5.2
- **样式**: Tailwind CSS 4
- **类型检查**: TypeScript 5
- **UI 组件**: Radix UI
- **图标**: Lucide React
- **数据库**: Prisma + SQLite
- **认证**: JWT

希望你喜欢这个博客系统！`,
      excerpt: '这是一个使用 Next.js 15 和 Tailwind CSS 构建的现代化博客系统，具有响应式设计和组件化架构。',
      slug: 'welcome-to-my-blog',
      status: 'PUBLISHED' as const,
      publishedAt: new Date('2024-01-15T10:00:00Z'),
      tagNames: ['Next.js', 'React', 'TypeScript', 'Tailwind CSS']
    },
    {
      title: '如何构建现代化的 Web 应用',
      content: `# 如何构建现代化的 Web 应用

在当今快速发展的 Web 开发领域，构建现代化、高性能的 Web 应用变得越来越重要。

## 关键原则

### 1. 性能优化
- 使用现代构建工具
- 实现代码分割
- 优化图片和资源
- 使用 CDN 加速

### 2. 用户体验
- 响应式设计
- 无障碍访问
- 直观的界面
- 快速加载

### 3. 开发体验
- TypeScript 类型安全
- 组件化开发
- 自动化测试
- 热重载开发

### 4. 服务端功能
- API 路由设计
- 数据库集成
- 用户认证
- 数据验证

## 总结

通过遵循这些原则，我们可以构建出既美观又实用的现代化 Web 应用。`,
      excerpt: '探讨构建现代化 Web 应用的关键原则，包括性能优化、用户体验和开发体验。',
      slug: 'building-modern-web-apps',
      status: 'PUBLISHED' as const,
      publishedAt: new Date('2024-01-16T14:30:00Z'),
      tagNames: ['Web开发', '性能优化', '用户体验']
    },
    {
      title: 'React 19 新特性预览',
      content: `# React 19 新特性预览

React 19 带来了许多令人兴奋的新特性和改进。

## 主要新特性

### 1. 并发特性
- 自动批处理
- 过渡更新
- Suspense 改进
- 并发渲染

### 2. 新的 Hooks
- use() Hook
- useOptimistic Hook
- useActionState Hook
- useFormStatus Hook

### 3. 性能提升
- 更快的渲染
- 更小的包体积
- 更好的内存管理
- 优化的重渲染

### 4. 开发体验
- 更好的错误边界
- 改进的调试工具
- 更清晰的错误信息

## 迁移指南

从 React 18 迁移到 React 19 相对简单，大部分现有代码无需修改。建议逐步迁移并测试新特性。`,
      excerpt: 'React 19 带来了并发特性、新 Hooks 和性能提升，本文预览了主要新特性。',
      slug: 'react-19-features-preview',
      status: 'PUBLISHED' as const,
      publishedAt: new Date('2024-01-17T09:15:00Z'),
      tagNames: ['React', 'JavaScript', '前端开发']
    },
    {
      title: 'Next.js 全栈开发实践',
      content: `# Next.js 全栈开发实践

Next.js 不仅是一个前端框架，更是一个强大的全栈开发平台。

## API 路由

Next.js 提供了内置的 API 路由功能，让你可以在同一个项目中处理前端和后端逻辑。

### 创建 API 端点

\`\`\`typescript
// app/api/posts/route.ts
export async function GET() {
  const posts = await prisma.post.findMany();
  return Response.json(posts);
}
\`\`\`

## 数据库集成

使用 Prisma 可以轻松管理数据库：

- 类型安全的数据库查询
- 自动生成客户端
- 数据库迁移管理
- 多数据库支持

## 认证和授权

实现用户认证系统：

- JWT 令牌管理
- 密码加密
- 角色权限控制
- 中间件保护

## 部署和优化

- Vercel 一键部署
- 边缘函数支持
- 图片优化
- 性能监控

## 总结

Next.js 为全栈开发提供了完整的解决方案，让开发者可以专注于业务逻辑而不是基础设施。`,
      excerpt: '探索 Next.js 全栈开发的最佳实践，包括 API 路由、数据库集成和用户认证。',
      slug: 'nextjs-fullstack-development',
      status: 'PUBLISHED' as const,
      publishedAt: new Date('2024-01-18T16:20:00Z'),
      tagNames: ['Next.js', '全栈开发', 'API', '数据库']
    },
    {
      title: '草稿文章示例',
      content: `# 这是草稿文章

这是一篇还在编辑中的草稿文章。

## 内容待完善

- 需要添加更多内容
- 需要检查语法
- 需要添加图片
- 需要完善代码示例

## 待办事项

- [ ] 完善内容结构
- [ ] 添加相关标签
- [ ] 设置发布时间
- [ ] 优化 SEO 描述

## 技术要点

这篇文章将讨论：

1. 某个技术概念
2. 实际应用场景
3. 代码实现示例
4. 最佳实践建议

敬请期待完整版本！`,
      excerpt: '这是一篇草稿文章，内容还在完善中。',
      slug: 'draft-article-example',
      status: 'DRAFT' as const,
      tagNames: ['草稿']
    }
  ];

  for (const postData of posts) {
    const { tagNames, ...post } = postData;
    
    const createdPost = await prisma.post.upsert({
      where: { slug: post.slug },
      update: {},
      create: {
        ...post,
        authorId: adminUser.id,
        tags: {
          create: tagNames.map(tagName => {
            const tag = tags.find(t => t.name === tagName);
            if (!tag) {
              throw new Error(`Tag not found: ${tagName}`);
            }
            return { tagId: tag.id };
          })
        }
      }
    });

    console.log(`创建文章: ${createdPost.title}`);
  }

  console.log('数据库种子数据创建完成！');
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
